package Vista;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import GestionDeDatos.GestorBD;
import InfoCliente.Amistad;
import InfoCliente.Solicitud;
import InfoCliente.UsuarioActivo;

public class Notificaciones {
	
private JPanel mainPanel = new JPanel();
	
	private JLabel jlb_intro;
	private JButton bt_aceptar, bt_rechazar;
	private JLabel jlb_solicitud;
	private JComboBox<String> jcb_contacto;
	private DefaultComboBoxModel<String> dcm; 
	private JButton jb_notifPrincipal;
	
	public Notificaciones() {
		initComponents();
	}
	
	private void initComponents() {
		
		mainPanel.setLayout(null);
		mainPanel.add(getJLabelIntro());
		mainPanel.add(getJButtonAceptar());
		mainPanel.add(getJButtonRechazar());
		mainPanel.add(getJLabelMessage());
		mainPanel.add(getJComboBoxContacto());
		mainPanel.setSize(530, 450);
		
		this.AceptarActionListener(new ActionListener() {
	         @Override
	         public void actionPerformed(ActionEvent e) {
	        	 
	        	 UsuarioActivo usuarioConfirma = new UsuarioActivo(View.id, View.pass);
	        	 Amistad amistad = new Amistad(getPadronInvitador(), View.id);
	        	 try {
	        		 GestorBD.Gestor().ConfirmarAmistad(usuarioConfirma, amistad);
	        	 } catch (Exception exception) {
	         		JOptionPane.showMessageDialog(mainPanel, exception.getMessage());
	        	 }
	        	 
				String[] fields = {"nombre", "apellido"};
					
				try {
					String[][] items = GestorBD.Gestor().ObtenerSolicitudes(usuarioConfirma).getRegisters(fields); 
					
					if (items.length > 0) {
						getDefaultComboBox().removeAllElements();
						for (int i=0; i < items.length; i++ ) {
							getDefaultComboBox().addElement(items[i][1] + " " + items[i][2]);
						}
					} else {
						getDefaultComboBox().removeAllElements();
						getDefaultComboBox().addElement("(vacio)");
					}
												
				} catch (Exception exception) {
					JOptionPane.showMessageDialog(mainPanel, exception.getMessage());
				}
						
		    	int cantidad = 0;
		    			
		    	try {
		    		
		    		String[][] items = GestorBD.Gestor().ObtenerSolicitudes(usuarioConfirma).getRegisters(); 
		    		cantidad = items.length;
		    		jb_notifPrincipal.setText("Notificaciones (" + cantidad + ")");
		    				
		    	} catch (Exception exception) {

		    	}
		    	
	         }
	      });
		
		this.RechazarActionListener(new ActionListener() {
	         @Override
	         public void actionPerformed(ActionEvent e) {
	        	 
	        	 UsuarioActivo usuarioDeclina = new UsuarioActivo(View.id, View.pass);
	        	 Solicitud solicitud = new Solicitud(getPadronInvitador(), View.id);
	        	 try {
	        		 GestorBD.Gestor().DeclinarSolicitud(usuarioDeclina, solicitud);
	        	 } catch (Exception exception) {
	         		JOptionPane.showMessageDialog(mainPanel, exception.getMessage());
	        	 }
	        	 
	        	 String[] fields = {"nombre", "apellido"};
					
					try {
						String[][] items = GestorBD.Gestor().ObtenerSolicitudes(usuarioDeclina).getRegisters(fields); 
						
						if (items.length > 0) {
							getDefaultComboBox().removeAllElements();
							for (int i=0; i < items.length; i++ ) {
								getDefaultComboBox().addElement(items[i][1] + " " + items[i][2]);
							}
						} else {
							getDefaultComboBox().removeAllElements();
							getDefaultComboBox().addElement("(vacio)");
						}
													
					} catch (Exception exception) {
						JOptionPane.showMessageDialog(mainPanel, exception.getMessage());
					}
							
			    	int cantidad = 0;
			    			
			    	try {
			    		
			    		String[][] items = GestorBD.Gestor().ObtenerSolicitudes(usuarioDeclina).getRegisters(); 
			    		cantidad = items.length;
			    		jb_notifPrincipal.setText("Notificaciones (" + cantidad + ")");
			    				
			    	} catch (Exception exception) {

			    	}
	         }
	      });
		
	}
	
	protected void setCantidad(MainPage panel) {
		jb_notifPrincipal = panel.getJButtonNotificaciones();
	}
	
	private JButton getJButtonAceptar() {
		if (bt_aceptar == null) {
			bt_aceptar = new JButton("Aceptar");
			bt_aceptar.setBounds(125, 350, 100, 40);
		}
		return bt_aceptar;
	}
	
	private JButton getJButtonRechazar() {
		if (bt_rechazar == null) {
			bt_rechazar = new JButton("Rechazar");
			bt_rechazar.setBounds(325, 350, 100, 40);
		}
		return bt_rechazar;
	}
	

	private JLabel getJLabelMessage() {
		if (jlb_solicitud == null) {
			jlb_solicitud = new JLabel("quiere ser tu amig@ en NerdsMap.");
			jlb_solicitud.setBounds(230,175,350,50);
			Font newTextFieldFont=new Font(jlb_solicitud.getFont().getName(),jlb_solicitud.getFont().getStyle(),14);   
			jlb_solicitud.setFont(newTextFieldFont);  
		}
		return jlb_solicitud;
	}

	private JLabel getJLabelIntro() {
		if (jlb_intro == null) {
			
			jlb_intro = new JLabel("Notificaciones");
			Font newTextFieldFont=new Font(jlb_intro.getFont().getName(),jlb_intro.getFont().getStyle(),18);   
		    jlb_intro.setFont(newTextFieldFont);
		    jlb_intro.setBounds(50, 20, 400, 50);
		}

		return jlb_intro;
	}
	
	private JComboBox<String> getJComboBoxContacto(){
		
		if (jcb_contacto == null) {

			dcm = new DefaultComboBoxModel<String>(new String[] {"(vacio)"});
			jcb_contacto = new JComboBox<String>();
			jcb_contacto.setBackground(Color.white);
		    jcb_contacto.setBounds(25, 190, 200, 20); 
		    jcb_contacto.setModel(dcm);		

		}
		return jcb_contacto;
	}
	
	public DefaultComboBoxModel<String> getDefaultComboBox() {
		return dcm;
	}
	
	public int getPadronInvitador() {
		UsuarioActivo usuarioConfirma = new UsuarioActivo(View.id,View.pass);
		String[] fields = {"padron"};
		String padronInvitador = "";
		
		try {
   	    padronInvitador = (GestorBD.Gestor().ObtenerSolicitudes(usuarioConfirma).getRegisters(fields)[jcb_contacto.getSelectedIndex()][0]);
		return Integer.parseInt(padronInvitador);
		
		} catch (Exception exception) {
    		JOptionPane.showMessageDialog(mainPanel, "No se puede realizar operación.");
		}
		return Integer.parseInt(padronInvitador);
	}
	
	public void AceptarActionListener(ActionListener listener) {
	    bt_aceptar.addActionListener(listener);
	}
	
	public void RechazarActionListener(ActionListener listener) {
	    bt_rechazar.addActionListener(listener);
	}
	
	public JComponent getMainComponent() {
	      return mainPanel;
	}


}
